package loadconfig

import (
	configurator "github.com/zeromicro/go-zero/core/configcenter"
	"github.com/zeromicro/go-zero/core/configcenter/subscriber"
)

// LoadETCDConfig 从ETCD加载配置并返回订阅器、配置器和配置值
// T: 配置数据的类型参数
// etcdServer: ETCD服务器地址列表
// etcdKey: ETCD中配置对应的键
// 返回值1: ETCD订阅器，用于监听配置变化
// 返回值2: 配置器，用于获取和管理配置
// 返回值3: 从ETCD获取的具体配置值
func LoadETCDConfig[T any](etcdServer []string, etcdKey string) (subscriber.Subscriber, configurator.Configurator[T], T) {
	// 创建ETCD订阅服务
	etcdService := subscriber.MustNewEtcdSubscriber(subscriber.EtcdConf{
		Hosts: etcdServer,
		Key:   etcdKey,
	})

	// 创建基于ETCD的配置中心
	etcdConfig := configurator.MustNewConfigCenter[T](configurator.Config{
		Type: "yaml",
	}, etcdService)

	// 获取配置值
	v, err := etcdConfig.GetConfig()
	if err != nil {
		panic(err)
	}
	return etcdService, etcdConfig, v
}